//>> 生产者和消费者 模型

#include "BQqueue.hpp"

void *Consumer(void *_data)
{
    BQ::BQqueues<int> *_queue = static_cast<BQ::BQqueues<int> *>(_data); // 看到同一份资源

    while (true)
    {

        int _data = 0;
        _queue->Epop(&_data);

        sleep(5);
        std::cout << "Consumer get the number of " << _data << std::endl;
    }
}

void *Productor(void *_data) // 生产者
{
    BQ::BQqueues<int> *_queue = static_cast<BQ::BQqueues<int> *>(_data); // 看到同一份资源
    int data = 1;
    while (true)
    {
        _queue->Equeue(data++);
        std::cout << "Producter put the number of " << data << " int!" << std::endl;
        sleep(2);
    }
}

int main()
{
    //>> 创建阻塞队列
    BQ::BQqueues<int> *_queue = new BQ::BQqueues<int>(5);

    //>> 单生产 单消费
    pthread_t _p1, _p2;
    pthread_create(&_p1, nullptr, Productor, _queue); // 生产者线程创造
    pthread_create(&_p2, nullptr, Productor, _queue); // 生产者线程创造

    pthread_t _c1, _c2;
    pthread_create(&_c1, nullptr, Consumer, _queue); // 消费者线程创造
    pthread_create(&_c2, nullptr, Consumer, _queue); // 消费者线程创造

    pthread_join(_p1, nullptr); // 生产等待

    pthread_join(_c1, nullptr); // 消费等待

    return 0;
}